package com.edushare.common.dao;

import java.util.Date;
import java.util.List;

import com.edushare.common.orm.ORMInterface;
import com.edushare.common.vo.UserAttribSet;
import com.edushare.common.vo.UserAttributes;
import com.edushare.common.vo.Users;

public class UserAttribDAO extends CayenneBasedDAO {
	public UserAttribDAO(ORMInterface ormInterface) {
		super(ormInterface);
	}

	public UserAttribSet createNewUserAttribSet(Users creator,
			String attrSetName, String attrSetDesc) {
		UserAttribSet set = new UserAttribSet();
		set.setUserAttribSetName(attrSetName);
		set.setUserAttribDesc(attrSetDesc);
		set.setCreator(creator);
		set.setUserAttribCreated(new Date());
		getDataContext().registerNewObject(set);
		getDataContext().commitChanges();
		return set;
	}

	public void setAttribute(Users user, String attributeName,
			String attributeValue, UserAttribSet set) {
		UserAttributes attr = getAttrib(set, attributeName);
		if (attr == null) {
			attr = newAttribute(set, attributeName);
		}
		attr.setStringValue(attributeValue);
		getDataContext().commitChanges();
	}

	public void setAttribute(Users user, String attributeName,
			int attributeValue, UserAttribSet set) {
		UserAttributes attr = getAttrib(set, attributeName);
		if (attr == null) {
			attr = newAttribute(set, attributeName);
		}
		attr.setIntValue(attributeValue);
		getDataContext().commitChanges();
	}

	public String getAttributeAsString(Users user, String attributeName,
			UserAttribSet set) {
		UserAttributes attr = getAttrib(set, attributeName);
		if (attr == null) {
			return "";
		}
		return attr.getValueAsString();
	}

	public int getAttributeAsInt(Users user, String attributeName,
			UserAttribSet set) {
		UserAttributes attr = getAttrib(set, attributeName);
		if (attr == null) {
			return 0;
		}
		return attr.getValueAsInt();
	}

	public void removeAttribute(Users user, String attributeName,
			UserAttribSet set) {
		UserAttributes attr = getAttrib(set, attributeName);
		getDataContext().deleteObject(attr);
		getDataContext().commitChanges();
	}

	public UserAttributes getAttrib(UserAttribSet set, String attributeName) {
		List<UserAttributes> attribList = set.getAttributes();
		for (UserAttributes attr : attribList) {
			if (attr.getUserAttributeName().trim().toLowerCase().equals(
					attributeName.toLowerCase().trim())) {
				return attr;
			}
		}
		return null;
	}

	public UserAttributes newAttribute(UserAttribSet set, String attributeName) {
		UserAttributes attr = new UserAttributes();
		attr.setAttribSet(set);
		attr.setUserAttributeName(attributeName);
		getDataContext().registerNewObject(attr);
		getDataContext().commitChanges();
		return attr;
	}
}
